package suray.rgv.communication;

import com.suray.basic.wcs.utils.comm.BaseMessage;
import com.suray.basic.wcs.utils.typedef.DWord;
import com.suray.basic.wcs.utils.typedef.Word;
import com.suray.basic.wcs.utils.typedef.Byte;

/**
 * 两栖车发送报文
 */
public class SeerSendMessage extends BaseMessage {

    /**
     * 报文的说明信息
     */
    public SeerSendMessage(int messageType, byte[] data) {
        super("报文的说明信息", true);

        baseDatas.add(new Byte("head", "报文同步头, 用于确定报文头部的开始"));
        baseDatas.add(new Byte("version", "协议的主版本号, 目前均填 0x01"));
        baseDatas.add(new Word("no", "请求及响应的序号（0 ~ 65535），请求包与响应包的这个字段是相同的，API 使用者自行填入序号。机器人对每个请求的响应都使用这个序号。"));
        baseDatas.add(new DWord("length", "数据区长度, 即 JSON 序列化数据的长度"));
        baseDatas.add(new Word("type", "标识报文的类型, 即 API 的编号, 具体见 下文 中各个 API 的章节"));
        baseDatas.add(new Word("res1", "程序内部使用（不必关注该区域的内容，其内容可能不为 0 且可能会发生变化）"));
        baseDatas.add(new Word("res2", "程序内部使用（不必关注该区域的内容，其内容可能不为 0 且可能会发生变化）"));
        baseDatas.add(new Word("res3", "程序内部使用（不必关注该区域的内容，其内容可能不为 0 且可能会发生变化）"));

        for  (int i = 0; i < data.length; i++) {
            baseDatas.add(new Byte("data" + i, "数据"));
            setValue("data" + i, data[i]);
        }

        setValue("head", 0x5A);
        setValue("version", 1);
        setValue("no", 0);
        setValue("length", data.length);
        setValue("type", messageType);
    }

    public SeerSendMessage(int messageType, byte[] data, int no) {
        super("报文的说明信息", true);

        baseDatas.add(new Byte("head", "报文同步头, 用于确定报文头部的开始"));
        baseDatas.add(new Byte("version", "协议的主版本号, 目前均填 0x01"));
        baseDatas.add(new Word("no", "请求及响应的序号（0 ~ 65535），请求包与响应包的这个字段是相同的，API 使用者自行填入序号。机器人对每个请求的响应都使用这个序号。"));
        baseDatas.add(new DWord("length", "数据区长度, 即 JSON 序列化数据的长度"));
        baseDatas.add(new Word("type", "标识报文的类型, 即 API 的编号, 具体见 下文 中各个 API 的章节"));
        baseDatas.add(new Word("res1", "程序内部使用（不必关注该区域的内容，其内容可能不为 0 且可能会发生变化）"));
        baseDatas.add(new Word("res2", "程序内部使用（不必关注该区域的内容，其内容可能不为 0 且可能会发生变化）"));
        baseDatas.add(new Word("res3", "程序内部使用（不必关注该区域的内容，其内容可能不为 0 且可能会发生变化）"));

        for  (int i = 0; i < data.length; i++) {
            baseDatas.add(new Byte("data" + i, "数据"));
            setValue("data" + i, data[i]);
        }

        setValue("head", 0x5A);
        setValue("version", 1);
        setValue("no", no);
        setValue("length", data.length);
        setValue("type", messageType);
    }

    public SeerSendMessage(int messageType) {
        super("报文的说明信息", true);

        baseDatas.add(new Byte("head", "报文同步头, 用于确定报文头部的开始"));
        baseDatas.add(new Byte("version", "协议的主版本号, 目前均填 0x01"));
        baseDatas.add(new Word("no", "请求及响应的序号（0 ~ 65535），请求包与响应包的这个字段是相同的，API 使用者自行填入序号。机器人对每个请求的响应都使用这个序号。"));
        baseDatas.add(new DWord("length", "数据区长度, 即 JSON 序列化数据的长度"));
        baseDatas.add(new Word("type", "标识报文的类型, 即 API 的编号, 具体见 下文 中各个 API 的章节"));
        baseDatas.add(new Word("res1", "程序内部使用（不必关注该区域的内容，其内容可能不为 0 且可能会发生变化）"));
        baseDatas.add(new Word("res2", "程序内部使用（不必关注该区域的内容，其内容可能不为 0 且可能会发生变化）"));
        baseDatas.add(new Word("res3", "程序内部使用（不必关注该区域的内容，其内容可能不为 0 且可能会发生变化）"));

        setValue("head", 0x5A);
        setValue("version", 1);
        setValue("no", 0);
        setValue("length", 0);
        setValue("type", messageType);
    }

    public SeerSendMessage(int messageType, int no) {
        super("报文的说明信息", true);

        baseDatas.add(new Byte("head", "报文同步头, 用于确定报文头部的开始"));
        baseDatas.add(new Byte("version", "协议的主版本号, 目前均填 0x01"));
        baseDatas.add(new Word("no", "请求及响应的序号（0 ~ 65535），请求包与响应包的这个字段是相同的，API 使用者自行填入序号。机器人对每个请求的响应都使用这个序号。"));
        baseDatas.add(new DWord("length", "数据区长度, 即 JSON 序列化数据的长度"));
        baseDatas.add(new Word("type", "标识报文的类型, 即 API 的编号, 具体见 下文 中各个 API 的章节"));
        baseDatas.add(new Word("res1", "程序内部使用（不必关注该区域的内容，其内容可能不为 0 且可能会发生变化）"));
        baseDatas.add(new Word("res2", "程序内部使用（不必关注该区域的内容，其内容可能不为 0 且可能会发生变化）"));
        baseDatas.add(new Word("res3", "程序内部使用（不必关注该区域的内容，其内容可能不为 0 且可能会发生变化）"));

        setValue("head", 0x5A);
        setValue("version", 1);
        setValue("no", no);
        setValue("length", 0);
        setValue("type", messageType);
    }
}
